---
hide_table_of_contents: true
sidebar_position: 1
---


import QAExample from "!!raw-loader!@examples/chains/question_answering.ts";

import RefineExample from "!!raw-loader!@examples/chains/qa_refine.ts";

import CodeBlock from "@theme/CodeBlock";


# 文档QA

LangChain提供了一系列专门针对非结构化文本数据处理的链条: `StuffDocumentsChain`， `MapReduceDocumentsChain`， 和 `RefineDocumentsChain`。这些链条是开发与这些数据交互的更复杂链条的基本构建模块。它们旨在接受文档和问题作为输入，然后利用语言模型根据提供的文档制定答案。

- `StuffDocumentsChain`: 这是三者中最简单的链条。它只是将所有输入文档注入到提示中作为上下文，并返回问题的答案。它适用于在少量文档上进行的QA任务。
- `MapReduceDocumentsChain`: 这个链条合并了一个预处理步骤，以选择每个文档的相关部分，直到标记的总数少于模型允许的最大标记数。然后，它使用转换后的文档作为上下文来回答问题。它适用于在更大的文档上进行的QA任务，并可以并行运行预处理步骤，从而减少运行时间。
- `RefineDocumentsChain`: 这个链条逐个遍历输入文档，每次迭代都使用上一个答案版本和下一个文档作为上下文更新中间答案。它适用于在大量文档上进行的QA任务。

## 用法， `StuffDocumentsChain`和`MapReduceDocumentsChain`

<CodeBlock language="typescript">{QAExample}</CodeBlock>


## 用法， `RefineDocumentsChain`


<CodeBlock language="typescript">{RefineExample}</CodeBlock>

